package com.maxmlr.music.base;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * @author max
 * @version 1.0
 * @Package com.maxmlr.mybatisplus.base
 * @ClassName BaseService
 * @Description service接口 基类
 * @Copyright Copyright (c) 2018: www.maxmlr.com.
 * @since 2018年12月15日 下午6:08:08
 */
public interface BaseService<T> extends IService<T> {

    /**
     * @Description : 分页获取列表数据（实体类）
     * ---------------------------------
     */
    Page<T> selectPageWithParam(Page<T> page, T param);

    /**
     * @Description : 分页获取列表数据 （Map）
     * ---------------------------------
     */
    Page<T> selectPageWithMap(Page<T> page, Map<String, Object> map);

    /**
     * @Description : 获取列表数据（实体类）
     * ---------------------------------
     */
    List<T> selectListWithParam(T param);

    /**
     * @Description : 获取列表数据 （Map）
     * ---------------------------------
     */
    List<T> selectListWithMap(Map<String, Object> map);

    /**
     * @Description : 获取List<Map>数据（实体类）
     * ---------------------------------
     */
    List<Map<String, Object>> selectListMapWithParam(T param);

    /**
     * @Description : 获取List<Map>数据（Map）
     * ---------------------------------
     */
    List<Map<String, Object>> selectListMapWithMap(Map<String, Object> map);

    /**
     * @Description : 获取List<Object>数据（实体类）
     * ---------------------------------
     */
    List<Object> selectListObjWithParam(T param);

    /**
     * @Description : 获取List<Object>数据（Map）
     * ---------------------------------
     */
    List<Object> selectListObjWithMap(Map<String, Object> map);

    /**
     * @Description : 获取Map数据（实体类）
     * ---------------------------------
     */
    Map<String, Object> selectMapWithParam(T param);

    /**
     * @Description : 获取Map数据（Map）
     * ---------------------------------
     */
    Map<String, Object> selectMapWithMap(Map<String, Object> map);

    /**
     * @Description : 获取Object数据（实体类）
     * ---------------------------------
     */
    Object selectObjWithParam(T param);

    /**
     * @Description : 获取Object数据（Map）
     * ---------------------------------
     */
    Object selectObjWithMap(Map<String, Object> map);

    /**
     * @Description : 获取指定数据（实体类）
     * ---------------------------------
     */
    T selectOneWithParam(T param);

    /**
     * @Description : 获取指定数据（Map）
     * ---------------------------------
     */
    T selectOneWithMap(Map<String, Object> map);

    /**
     * @Description : 获取指定数据（Obj）
     * ---------------------------------
     */
    T selectOneByObj(Serializable var1);

    /**
     * 根据 ID 删除
     *
     * @param id
     * @return
     */
    boolean deleteById(Serializable id);

    /**
     * 插入一条记录（选择字段，策略插入）
     *
     * @param entity
     * @return
     */
    boolean insert(T entity);
}
